# -*- coding:utf-8 -*-
#
# JOAQUÍN RAMÓN ANTÚNEZ SÁNCHEZ - 1 de septiembre de 2014

from datetime import date
from mezzo import mezzo
from mon.mon import monstr

####################################################################################################
# Musico
####################################################################################################
class musician(mezzo):
         
    def __str__(self):        
        value = '%s %s, %s' % ( str(self.id).zfill(4), self.apellidos, self.nombre )
        # si es un compositor, añado su onomástica
        if isinstance(self, bach):
            if self.nacimiento > 0 and self.muerte > 0:
                value += ' ({}-{})'.format(self.nacimiento, self.muerte)
            else:
                if self.nacimiento > 0:
                    value += ' ({})'.format(self.nacimiento)
        value = str(value).decode('utf-8').upper()    
        return str(value).decode('utf-8').title()      
        
    def __get_apellidos(self): return monstr(self._mezzo__data['apellidos']).totitle()
    def __set_apellidos(self, value):
        self._mezzo__data['apellidos'] = monstr(value).toupper()
            
    def __get_nombre(self): return monstr(self._mezzo__data['nombre']).totitle()
    def __set_nombre(self, value):
        self._mezzo__data['nombre'] = monstr(value).toupper()    

    def __get_musico(self): 
        return '{}, {}'.format( monstr(self._mezzo__data['apellidos']).totitle(), 
                                monstr(self._mezzo__data['nombre'] ).totitle() )
    def __set_musico(self, value):        
        pos = str(value).find(',')
        if pos != -1:
            self._mezzo__data['apellidos'] = monstr( value[0:pos]  ).toupper()    
            self._mezzo__data['nombre'] = monstr( value[pos + 1:] ).toupper()
        else:
            self._mezzo__data['apellidos'] = monstr(value).toupper()
        
    # propiedades
    apellidos   = property( __get_apellidos, __set_apellidos )
    nombre      = property( __get_nombre, __set_nombre )
    musico      = property( __get_musico, __set_musico )    
           
            
####################################################################################################
# Bach
####################################################################################################
class bach(musician):
          
    def __get_nacimiento(self): return self._mezzo__data['nacimiento']
    def __get_muerte(self): return self._mezzo__data['muerte']
    
    def __set_nacimiento(self, value):
        try:
            self._mezzo__data['nacimiento'] = int(value)
        except:
            self._mezzo__data['nacimiento'] = 0
            
    def __set_muerte(self, value):
        try:
            self._mezzo__data['muerte'] = int(value)
        except:
            self._mezzo__data['muerte'] = 0
            
    def __get_edad(self):
        if self.nacimiento > 0 and self.muerte > 0:
            return self.muerte - self.nacimiento
        elif self.nacimiento > 0:
            return date.today().year - self.nacimiento
        return ''
             
        
                         
                    
    nacimiento = property( __get_nacimiento, __set_nacimiento )
    muerte     = property( __get_muerte, __set_muerte )
    edad       = property( __get_edad )          

####################################################################################################
# Kleiber
####################################################################################################
class kleiber(musician):
    pass    